﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Cotizav.CONEXION;
using System.Transactions;

namespace Cotizav.CONTROLADOR
{
    class CtrlCondicion
    {
        private ConexionDataContext conexion;

        internal List<CONEXION.CONDICION> getListCondicion()
        {
            using (conexion = new ConexionDataContext())
            {
                List<CONDICION> result = conexion.CONDICION.Where(x => x.eliminado == 0).ToList();

                return result;
            }
        }

        internal List<CONDICION> getListCondicion(string tipoCondicion)
        {
            using (conexion = new ConexionDataContext())
            {
                try
                {
                    List<CONDICION> result = new List<CONDICION>();
                    switch (tipoCondicion)
                    {
                        case "Alquiler": //condiciones de Alquiler
                            result = conexion.CONDICION.Where(x => x.tipoCondicion == "Alquiler" && x.eliminado == 0).ToList();
                            break;
                        case "Comercial": //condiciones comerciales
                            result = conexion.CONDICION.Where(x => x.tipoCondicion == "Comercial" && x.eliminado == 0).ToList();
                            break;
                        case "Información adicional": //informacion adicional
                            result = conexion.CONDICION.Where(x => x.tipoCondicion == "Información adicional" && x.eliminado == 0).ToList();
                            break;
                    }

                    return result;
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }

        internal List<CONDICION> getListCondicionDefecto(string tipoCondicion)
        {
            using (conexion = new ConexionDataContext())
            {
                try
                {
                    List<CONDICION> result = new List<CONDICION>();
                    switch (tipoCondicion)
                    {
                        case "Alquiler": //condiciones de Alquiler
                            result = conexion.CONDICION.Where(x => x.tipoCondicion == "Alquiler" && x.esDefecto == 1 && x.eliminado == 0).ToList();
                            break;
                        case "Comercial": //condiciones comerciales
                            result = conexion.CONDICION.Where(x => x.tipoCondicion == "Comercial" && x.esDefecto == 1 && x.eliminado == 0).ToList();
                            break;
                        case "Información adicional": //informacion adicional
                            result = conexion.CONDICION.Where(x => x.tipoCondicion == "Información adicional" && x.esDefecto == 1 && x.eliminado == 0).ToList();
                            break;
                    }

                    return result;
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }

        internal CONDICION getCondicion(string idCondicion)
        {
            using (conexion = new ConexionDataContext())
            {
                try
                {
                    return conexion.CONDICION.SingleOrDefault(x => x.idCondicion == idCondicion && x.eliminado == 0);
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }

        internal bool registrarCondicion(CONDICION cond)
        {
            using (TransactionScope transactionScope = new TransactionScope())
            {
                using (conexion = new ConexionDataContext())
                {
                    try
                    {
                        int correlativoCondicion = conexion.COTIZAV_CORRELATIVO.SingleOrDefault(x => x.IDENTIFICADOR == "COTIZAV").CONDICION.Value;
                        string num = Convert.ToString(correlativoCondicion);
                        string numero = num.Trim().PadLeft(10, '0');
                        string idCondicion = "COND_" + numero;

                        cond.idCondicion = idCondicion;

                        conexion.CONDICION.InsertOnSubmit(cond);
                        conexion.SubmitChanges();
                        conexion.increm_ContCondicion();
                        transactionScope.Complete();
                        return true;
                    }
                    catch (Exception)
                    {
                        throw;
                    }
                }
            }
        }

        internal void actualizarCondicion(CONDICION condic)
        {
            using (TransactionScope transactionScope = new TransactionScope())
            {
                using (conexion = new ConexionDataContext())
                {
                    try
                    {
                        CONDICION con = conexion.CONDICION.Single(x => x.idCondicion == condic.idCondicion);

                        con.nombreCondicion = condic.nombreCondicion;
                        con.tipoCondicion = condic.tipoCondicion;
                        con.esDefecto = condic.esDefecto;

                        conexion.SubmitChanges();
                        transactionScope.Complete();
                    }
                    catch (Exception)
                    {                        
                        throw;
                    }                  
                }
            }
        }

        internal void eliminarCondicion(CONDICION condicion)
        {
            using (TransactionScope transactionScope = new TransactionScope())
            {
                using (conexion = new ConexionDataContext())
                {
                    try
                    {
                        CONDICION cond = conexion.CONDICION.Single(x => x.idCondicion == condicion.idCondicion);
                        cond.eliminado = 1;

                        conexion.SubmitChanges();
                        transactionScope.Complete();
                    }
                    catch (Exception)
                    {                        
                        throw;
                    }
                }
            }
        }
    }
}
